package day03;

/*
面向过程：
    最小的处理单位是函数。
    把问题分解成一个个的函数，函数按一定的顺序调用来实现这个问题。
    把大象装入冰箱：
       1. 打开冰箱门
       2. 把大象装入冰箱
       3. 把门关上
    3个步骤可以封装成3个或多个函数，函数顺序调用即可。
面向对象：
    最小的处理单位是类。
    把过程中有哪些对象识别出来，每种对象有什么样的属性，有什么样的行为。
    把对象抽象成一个类型，属性对应类中的成员变量，行为对应着方法。
    把大象装入冰箱：
       大象：身高、体重(属性)，大象.进入(冰箱)
       冰箱：冰箱.开门()、冰箱.关门()
       人：姓名(属性) 人.打开(冰箱)  人.操作(大象)  人.关闭(冰箱)

   类：一个抽象，具有相同属性和行为的一类事物。人类 学生类  动物类等等
   对象/实例：具体的一个人，这个人有自己的姓名、身高、体重等等。

 */
public class Demo01 {
    public static void main(String[] args) {
        Student stu1 = new Student(); // 创建一个对象，具体的学生
        stu1.name = "Tom";  // 对象.属性名  设置/获取属性的值
        stu1.age = 18;
        stu1.gender = '男';
        stu1.score = 99;
        System.out.println("这个学生的姓名：" + stu1.name);

        // 没有返回值的方法  对象.方法名
        stu1.learning("英语");
        stu1.sleeping();
        // 有返回值的方法，用一个变量接收返回值
        String e = stu1.eating("米饭", "西红柿鸡蛋汤");
        System.out.println(e);

        // 有返回值的方法，直接使用返回值
        System.out.println(stu1.eating("盖饭", "西红柿鸡蛋汤"));

        // 再实例化一个学生，调用这些方法
        Student stu2 = new Student(); // 创建一个对象，具体的学生
        stu2.name = "Lucy";
        stu2.learning("数学");
        stu2.sleeping();
    }
}

/*
Student 类名
 */
class Student {
    /*
    成员变量与局部变量：
    1. 成员变量：定义在类内部的变量，
       作用域：对象创建之后，成员变量就存在了，对象销毁时，成员变量也跟着销毁。
       内存：存放在堆内存中，生命周期一般都比较长，更新比较慢。
       可以用public（公共的，外部可以访问）、private（私有，只能类的内部访问）、static来修饰
       可以用final修饰
    2. 局部变量：方法中定义的变量，方法的参数，
       作用域：在方法体内。方法调用完，局部变量就释放了。
       内存：存放在栈内存中，生命周期一般都比较短，更新比较快。
       不能用public、private、static来修饰
       可以用final修饰

    不知道该定义成局部变量还是成员变量时，可以先定义成局部变量，
    后面比如要跨方法访问这个变量，跨类访问这个变量时，
    把局部变量提升为成员变量。
     */
    // 属性/成员变量，在类中直接定义
    String name; // 姓名
    char gender; // 性别
    int age; // 年龄
    double score; // 成绩

    /*
    public 修饰符，表示公共的，用public修饰后，在类的外部可以访问到。
    void 表示没有返回值
    learning  方法名
    String book 参数列表：参数类型 参数名
     */
    public void learning(String book) {
        // 可以直接使用类中定义的属性
        System.out.println(name + "正在看" + book);
    }
    // 没有参数，没有返回值
    public void sleeping() {
        System.out.println(name + "在睡觉");
    }
    // 多个参数时，用逗号分隔，用return返回对应类型的值
    public String eating(String rice, String soup) {
        String ret = name + "正在吃" + rice + "，正在喝" + soup;
        return ret;
    }


}
